/*
 * 文件名：WsFlowProcess.java
 * 版权：Copyright by http://www.infopub.top/
 * 描述：
 * 修改人：Awoke
 * 修改时间：2019年12月13日
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */

package top.infopub.mgr.flow.service;


import com.github.pagehelper.Page;
import top.infopub.mgr.flow.cnst.FlowTemplateEnum;
import top.infopub.mgr.flow.domain.ProcessNodeDomain;

import java.util.List;
import java.util.Map;


/**
 * 工作审批流程相关服务方法
 * @author Awoke
 * @version 2019年12月13日
 * @see WsFlowProcessService
 * @since
 */
public interface WsFlowProcessService {

    /**
     * 新增发起 工作流
     * @param templateId 模板ID
     * @param srcBizTable 关联业务表名
     * @param srcBizSguid 关联的业务表记录ID
     * @param processId 审批流程ID
     * @param oaTitle 待办标题
     * @see
     */
    void launch(String templateId, String srcBizTable, String srcBizSguid, String processId, String oaTitle);

    /**
     * 新增发起 工作流
     * @param templateEnum  模板枚举 参见：FlowTemplateEnum
     * @param srcBizSguid 关联的业务表记录ID
     * @param processId 审批流程ID
     * @param oaTitle OA标题
     * @see
     */
    void launch(FlowTemplateEnum templateEnum, String srcBizSguid, String processId, String oaTitle);

    /**
    *  审批当前 通过时 发起下一个审批节点 <br/>
     * 如果是最后一个节点审批通过，则表单审批通过  <br/>
     * 如果审批不通过，则表单审批终止  <br/>
     * 最后，修改业务表单的process_status
     * @param srcBizSguid
     * @param processId 
     * @param state  审批结果 0=不同意 1=同意
     * @param dealIdea 审批意见
     * @param fileAtt 附件数组
     * @return 
     * @see
     */
    void dealWith(String srcBizSguid, String processId, String state, String dealIdea,
                  String[] fileAtt);

    /**
     * 查询当前用户待审批的流程节点
     * @param srcBizTable 业务表单名  为空时查询所有
     * @return 
     * @see
     */
    List<ProcessNodeDomain> queryPendingProcNodes(String srcBizTable);

    /**
     * 分页查询当前用户待审批的流程节点
     * @param page
     * @param srcBizTable 业务表单名  为空时查询所有
     * @return 
     * @see
     */
    Page<ProcessNodeDomain> queryPagePendingProcNodes(String srcBizTable,
                                                      Page<ProcessNodeDomain> page);

    /**
     * 查询审批流程(当前节点 最大节点)与所有节点信息    所有节点= 已审批 flow_process_node + 未审批 flow_template_node
     * @param processId
     * @return map   所有审批节点 sharedAllNodes:List  当前节点 sharedNowIdx:Int  最大节点 sharedMaxIdx:Int
     * @see
     */
    Map<String, Object> queryProcAndAllNodes(String processId);

    /**
     * 根据业务表单名字  查询工作流模板ID
     * @param srcBizTable 业务表单名
     * @return 
     * @see
     */
    String queryTemplateIdByTable(String srcBizTable);

    /**
     * 根据业务表单名字  和 分支标识 查询工作流模板ID
     * @param srcBizTable 业务表单名
     * @param branchCode 分支标识 
     * @return 
     * @see
     */
    String queryTemplateIdByTableBranch(String srcBizTable, String branchCode);

    /**
     * 根据业务表单名字-查询某公司特定的 工作流模板ID
     * @param srcBizTable 业务表单名
     * @param hrOrgId  关联公司ID
     * @return 
     * @see
     */
    String queryTemplateIdByOrg(String srcBizTable, String hrOrgId);

    /**
     * 获得对应的审批人ID
     * @param templateNodeId
     * @return 
     * @see
     */
    String checkUserId(String templateNodeId);

    /**
     * 调用 WsStaffOfficeService#myAllVisibleProCodes方法
     * @return 
     * @see
     */
    String proxyVisibleProCodes();

    /**
     * 根据审批流id逻辑删除业务表记录
     * @param processId 审批id
     * @see
     */
    void logicDel(String processId);

    List<String> checkUserIds(String templateNodeId,String processId );
}
